#ifndef __RTTHREAD_THREAD_H__
#define __RTTHREAD_THREAD_H__


#include "rt_list.h"
#include "rt_error.h"
#include "rt_stack.h"
#include "rt_config.h"

struct rt_thread
{
    /* rt 对象 */
    char        name[RT_NAME_MAX];    /* 对象的名字 */
    rt_uint8_t  type;                 /* 对象类型 */
    rt_uint8_t  flags;                /* 对象的状态 */
    rt_list_t   list;                 /* 对象的列表节点 */
    rt_list_t   tlist;                /* 线程链表节点 */
    void        *sp;                      /* 线程栈指针 */
    void        *entry;                   /* 线程入口地址 */
    void        *parameter;           /* 线程形参 */
    void        *stack_addr;          /* 线程起始地址 */
    rt_uint32_t stack_size;           /* 线程栈大小，单位为字节 */

    rt_ubase_t  remaining_tick;       /* 用于实现阻塞延时 */

    rt_uint8_t  current_priority;     /* 当前优先级 */    
    rt_uint8_t  init_priority;        /* 初始优先级 */       
    rt_uint32_t number_mask;          /* 当前优先级掩码 */    

    rt_err_t    error;                /* 错误码 */           
    rt_uint8_t  stat;                 /* 线程的状态 */      



};
typedef struct rt_thread *rt_thread_t;


rt_err_t rt_thread_init(struct rt_thread *thread,
    void (*entry)(void *parameter),
    void             *parameter,
    void             *stack_start,
    rt_uint32_t       stack_size,
    rt_uint8_t        priority);

rt_err_t rt_thread_resume(rt_thread_t thread);
rt_err_t rt_thread_startup(rt_thread_t thread);


#endif /* __RTTHREAD_THREAD_H__ */
